package 传智播客_黑马.java基础.集合总览.Collection.List.LinkedList;

import java.util.LinkedList;

/*
boolean add(E e)
将指定的元素追加到此列表的末尾。
void add(int index, E element)
在此列表中的指定位置插入指定的元素。
boolean addAll(Collection<? extends E> c)
按照指定集合的迭代器返回的顺序将指定集合中的所有元素追加到此列表的末尾。
boolean addAll(int index, Collection<? extends E> c)
将指定集合中的所有元素插入到此列表中，从指定的位置开始。
void addFirst(E e)
在该列表开头插入指定的元素。
void addLast(E e)
将指定的元素追加到此列表的末尾。
void clear()
从列表中删除所有元素。
Object clone()
返回此 LinkedList的浅版本。
boolean contains(Object o)
如果此列表包含指定的元素，则返回 true 。
Iterator<E> descendingIterator()
以相反的顺序返回此deque中的元素的迭代器。
E element()
检索但不删除此列表的头（第一个元素）。
E get(int index)
返回此列表中指定位置的元素。
E getFirst()
返回此列表中的第一个元素。
E getLast()
返回此列表中的最后一个元素。
int indexOf(Object o)
返回此列表中指定元素的第一次出现的索引，如果此列表不包含元素，则返回-1。
int lastIndexOf(Object o)
返回此列表中指定元素的最后一次出现的索引，如果此列表不包含元素，则返回-1。
ListIterator<E> listIterator(int index)
从列表中的指定位置开始，返回此列表中元素的列表迭代器（按适当的顺序）。
boolean offer(E e)
将指定的元素添加为此列表的尾部（最后一个元素）。
boolean offerFirst(E e)
在此列表的前面插入指定的元素。
boolean offerLast(E e)
在该列表的末尾插入指定的元素。
E peek()
检索但不删除此列表的头（第一个元素）。
E peekFirst()
检索但不删除此列表的第一个元素，如果此列表为空，则返回 null 。
E peekLast()
检索但不删除此列表的最后一个元素，如果此列表为空，则返回 null 。
E poll()
检索并删除此列表的头（第一个元素）。
E pollFirst()
检索并删除此列表的第一个元素，如果此列表为空，则返回 null 。
E pollLast()
检索并删除此列表的最后一个元素，如果此列表为空，则返回 null 。
E pop()
从此列表表示的堆栈中弹出一个元素。
void push(E e)
将元素推送到由此列表表示的堆栈上。
E remove()
检索并删除此列表的头（第一个元素）。
E remove(int index)
删除该列表中指定位置的元素。
boolean remove(Object o)
从列表中删除指定元素的第一个出现（如果存在）。
E removeFirst()
从此列表中删除并返回第一个元素。
boolean removeFirstOccurrence(Object o)
删除此列表中指定元素的第一个出现（从头到尾遍历列表时）。
E removeLast()
从此列表中删除并返回最后一个元素。
boolean removeLastOccurrence(Object o)
删除此列表中指定元素的最后一次出现（从头到尾遍历列表时）。
E set(int index, E element)
用指定的元素替换此列表中指定位置的元素。
int size()
返回此列表中的元素数。
Spliterator<E> spliterator()
在此列表中的元素上创建late-binding和故障快速 Spliterator 。
Object[] toArray()
以正确的顺序（从第一个到最后一个元素）返回一个包含此列表中所有元素的数组。
<T> T[] toArray(T[] a)
以正确的顺序返回一个包含此列表中所有元素的数组（从第一个到最后一个元素）; 返回的数组的运行时类型是指定数组的运行时类型。
*/
public class LearnLinkedList {
    /*
    底层是一个链表结构,查询慢,增删快,里面包含了大量操作首尾元素的方法
    注意:使用LInkedList集合不应该使用多态


        void addFirst(E e)
        在该列表开头插入指定的元素。
        void addLast(E e)
        将指定的元素追加到此列表的末尾。
        void push(E e)
        将元素推送到由此列表表示的堆栈上。

        E getFirst()
        返回此列表中的第一个元素。
        E getLast()
        返回此列表中的最后一个元素。

        E removeFirst()
        从此列表中删除并返回第一个元素。
        E removeLast()
        从此列表中删除并返回最后一个元素。
        E pop()
        从此列表表示的堆栈中弹出一个元素。

        public Boolean isEmpty();如果列表不包含元素,则返回true.

     */
    public static void main(String[] args) {
        show03();
    }

    /*
    E removeFirst()
        从此列表中删除并返回第一个元素。
        E removeLast()
        从此列表中删除并返回最后一个元素。
        E pop()
        从此列表表示的堆栈中弹出一个元素。相当于removeFirst
     */
    private static void show03() {
        LinkedList<String> list = new LinkedList<>();
        //使用add方法添加元素
        list.add("a");
        list.add("b");
        list.add("c");
        System.out.println(list);

//        String s = list.removeFirst();
        String s = list.pop();//和上面是等效的
        System.out.println("被移除的第一个元素" + s);
        System.out.println(list);

        String s1 = list.removeLast();
        System.out.println("被移除的最后一个元素" + s1);
        System.out.println(list);
    }

    /*
    E getFirst()
    返回此列表中的第一个元素。
    E getLast()
    返回此列表中的最后一个元素。
     */
    private static void show02() {
        LinkedList<String> list = new LinkedList<>();
        //使用add方法添加元素
        list.add("a");
        list.add("b");
        list.add("c");

        list.clear();//清空集合的元素,会报NoSuchElementException

        //public Boolean isEmpty();如果列表不包含元素(注意这不是指某个元素,而是空不空),则返回true.
        if(!list.isEmpty()){
            String first = list.getFirst();
            System.out.println(first);

            String last = list.getLast();
            System.out.println(last);
        }


    }

    /*
    void addFirst(E e)
        在该列表开头插入指定的元素。
        void addLast(E e)
        将指定的元素追加到此列表的末尾。
        void push(E e)
        将元素推送到由此列表表示的堆栈上。
     */
    private static void show01() {
        //创建LinkedList集合对象
        LinkedList<String> list = new LinkedList<>();
        //使用add方法添加元素
        list.add("a");
        list.add("b");
        list.add("c");
        System.out.println(list);

        //将指定元素插入此列表的开头
//        list.addFirst("www");
        list.push("www");
        System.out.println(list);

        //addLast,将指定元素添加到次列表的末尾.此方法等效于add();
        list.addLast("com");
        System.out.println(list);

    }
}
